package test1.opengl.jasonbu.com.myapplication1;

/**
 * Created by jasonbu on 2017/3/12.
 */

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.opengles.GL10;

public class MySquare {
    private FloatBuffer vertexBuffer;   // 顶点数组缓冲区

    private float[] vertices = {        // 正方形的顶点数据
            -1.0f, -1.0f, 0.0f,         // 0.左下角
            1.0f, -1.0f, 0.0f,         // 1.右下角
            -1.0f,  1.0f, 0.0f,         // 2.左上角
            1.0f,  1.0f, 0.0f,         // 3.右上角
    };

    // 构造函数  - 设置顶点缓冲区
    public MySquare() {
        // 设置顶点数组，顶点数据为浮点数据类型。一个浮点类型的数据长度为四个字节
        ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
        vbb.order(ByteOrder.nativeOrder()); // 使用原生字节顺序
        vertexBuffer = vbb.asFloatBuffer(); // 将字节类型缓冲区转换成浮点类型
        vertexBuffer.put(vertices);         // 将数据复制进缓冲区
        vertexBuffer.position(0);           // 定位到初始位置
    }

    // 渲染正方形
    public void draw(GL10 gl){
        // 使能顶点数据并指定顶点数据缓冲区
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glColor4f(0.5f, 0.5f, 1.0f, 1.0f);   // 设置当前颜色

        // 通过顶点数组直接绘制图元序列
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length/3);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    }
}
